<?php 
	include_once $_SERVER["DOCUMENT_ROOT"].'/outils/parameters/ParameterGetter.php';
	include_once $_SERVER["DOCUMENT_ROOT"].'/outils/exceptions/FormulaireException.php';
	include_once $_SERVER["DOCUMENT_ROOT"].'/outils/writerJSON/WriterJSON.php';
	include_once $_SERVER["DOCUMENT_ROOT"].'/outils/string/StringUtils.php';
	include_once $_SERVER["DOCUMENT_ROOT"].'/service/uc/gerercompte/GererCompteService.php';
	include_once $_SERVER["DOCUMENT_ROOT"].'/service/uc/gerercompte/CompteVO.php';

	class GererCompteAction {
		public static function ajouter() {
			$compteVO = GererCompteService::ajouterCompte();
			ParameterGetter::setSessionParameter("compteVO", $compteVO);
			WriterJSON::echoSuccessState();
		}
		
		public static function modifier() {
			$id = ParameterGetter::getRequestParameter("id", true);
			$compteVO = GererCompteService::modifierCompte($id);
			ParameterGetter::setSessionParameter("compteVO", $compteVO);	
			
			$listeIdRoleAsString = StringUtils::getIdArrayAsString($compteVO->listeRoleVO);
			WriterJSON::echoDonnees(array("login" => $compteVO->login, "motDePasse" => $compteVO->motDePasse, "listeRole" => $listeIdRoleAsString));
		}
		
		public static function getIdModifie() {
			$compteVO = ParameterGetter::getSessionParameter("compteVO", true);
			$id = $compteVO->id;
			WriterJSON::echoDonnees (array("id" => "$id"));
		}
		
		public static function valider() {
			$compteVO = ParameterGetter::getSessionParameter("compteVO", true);
			$compteVO->login = ParameterGetter::getRequestParameter("login", true);
			$compteVO->motDePasse = ParameterGetter::getRequestParameter("motDePasse", true);
			$listeIdRoleVOString = ParameterGetter::getRequestParameter("listeRole", true);
			$listeIdRoleVO = StringUtils::explodeString("|", $listeIdRoleVOString);
			$compteVO->listeRoleVO = GererCompteService::convertListeIdToListeRoleVO($listeIdRoleVO);
			
			GererCompteAction::verifierCompteAvantValidation($compteVO);
			GererCompteService::validerCompte($compteVO);
			ParameterGetter::removeSessionParameter("compteVO");
			WriterJSON::echoSuccess ("La compte a bien été ajoutée/modifiée");
		}
		
		public static function annuler() {
			ParameterGetter::removeSessionParameter("compteVO");
			WriterJSON::echoSuccessState();
		}
		
		public static function supprimer() {
			$id = ParameterGetter::getRequestParameter("id", true);
			GererCompteService::supprimerCompte($id);
			WriterJSON::echoSuccess ("La compte a bien été supprimée");
		}
		
		public static function getListeRoleLie() {
			$compteVO = ParameterGetter::getSessionParameter("compteVO", true);
			$roleTrouve= false;
			foreach ($compteVO->listeRoleVO as $i => $roleVO) {
				$listeDonnees[$roleVO->id] = $roleVO->libelle;
				$roleTrouve = true;
			}
			if ($roleTrouve) {
				WriterJSON::echoDonnees($listeDonnees);
			} else {
				WriterJSON::echoSuccessState();
			}
		}
		
		public static function ajouterRoleSurCompte() {
			$idRole = ParameterGetter::getRequestParameter("idObjet", true);
			$roleVO = GererCompteService::getRoleVOByID($idRole);
				
			$compteVO = ParameterGetter::getSessionParameter("compteVO", true);
			$compteVO->listeRoleVO[]=$roleVO; 
			ParameterGetter::setSessionParameter("compteVO", $compteVO);
			WriterJSON::echoSuccessState();
		}
		
		public static function supprimerRoleSurCompte() {
			$idRole = ParameterGetter::getRequestParameter("idObjet", true);
				
			$compteVO = ParameterGetter::getSessionParameter("compteVO", true);
			foreach ($compteVO->listeRoleVO as $i => $roleVO) {
				if ($idRole == $roleVO->id) {
					unset ($compteVO->listeRoleVO[$i]);
				}
			}
			ParameterGetter::setSessionParameter("compteVO", $compteVO);
			WriterJSON::echoSuccessState();
		}
		
		private static function verifierCompteAvantValidation($compteVO) {
			$exception = new FormulaireException();
			if (StringUtils::isEmpty($compteVO->login)) {
				$exception->ajouterChampNonRenseigne("Login");
			}
			if (StringUtils::isEmpty($compteVO->motDePasse)) {
				$exception->ajouterChampNonRenseigne("MotDePasse");
			}
			if ($exception->contientErreurs()) {
				throw $exception;
			}
		}
	}
?>